package NIO;

import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author 47868
 */
public class ByteBufferDemo {
    public static void main(String[] args)throws Exception {
        FileChannel channel=new FileInputStream("file1.txt").getChannel();
        //给缓冲区设置大小 堆内存空间
        ByteBuffer buffer = ByteBuffer.allocate(10); //java堆内存，读写效率低，收到GC影响;
        ByteBuffer buffer1 = ByteBuffer.allocateDirect(10); //直接内存，读写效率高，不受GC影响，分配的效率低;
        //给缓存区设置大小
        ByteBuffer.allocateDirect(10);
        //写数据
        /*1.*/ channel.read(buffer);
        /*2.*/ buffer.put(new byte[]{0x61,0x62});
        //读数据
        /*1.*/ buffer.get();//一个字节一个字节读
        /*1.2*/buffer.get(0);//按照索引读取，默认从0开始
        /*2.*/ buffer.get(new byte[5]); //5个字节5个字节读
        /*3.*/ channel.write(buffer);//使用channel读取
        //切换
        buffer.clear();
        buffer.flip();//
        //指针移动
        buffer.compact();//切换到写模式并把未读取的内容移到第一位
        buffer.rewind();//将读指针移到第一位
        buffer.mark();//将当前指针加标记
        buffer.reset();//将指针移到标记的地方
    }
}
